import java.util.*;

/**
 * @author LKQ
 * @date 2022/4/7 9:19
 * @description 先从3个数开始，假设成立为等差，那么看下一个数与末尾公差是否相等，相等，继续加入等差数列，不相等，从它开始寻找下一个
 */
public class Solution {
    public static void main(String[] args) {
        Solution solution = new Solution();
        int[] nums = {1,2,3,5,7};
        solution.numberOfArithmeticSlices(nums);
    }
    public int numberOfArithmeticSlices(int[] nums) {
        int n = nums.length;
        if(n < 3) {
            return 0;
        }
        int ans = 0;
        int l = 0, r = 2;
        while (r < n) {
            // 公差
            int d = 0;
            if (nums[l + 1] - nums[l] == nums[l + 2] - nums[l + 1]) {
                d = nums[l + 1] - nums[l];
            }else {
                l++;
                r = l + 2;
                continue;
            }
            // 前三项成为等差，那么判断后面能否续上
            while (r + 1 < n && nums[r + 1] - nums[r] == d) {
                r++;
            }
            int length = r - l + 1;
            // 长度为length的等差数列，子数组个数
            ans += (length - 3 + 1) * (length - 3 + 2) / 2;
            // 注意这里不能为l = r+1，会出现 1 2 3 5 7这种情况，
            l = r;
            r = l + 2;
        }
        return ans;
    }

}
